package com.ruoyi.members.service.impl;

import java.util.List;
import java.util.Random;

import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.common.core.domain.model.WxLoginBody;
import com.ruoyi.common.core.domain.model.WxResponeUser;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.sign.Md5Utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.members.mapper.MhUserMapper;
import com.ruoyi.members.domain.MhUser;
import com.ruoyi.members.service.IMhUserService;

/**
 * 会员信息Service业务层处理
 *
 * @author yuekai
 * @date 2025-11-14
 */
@Service
public class MhUserServiceImpl implements IMhUserService {
    @Autowired
    private MhUserMapper mhUserMapper;

    /**
     * 查询会员信息
     *
     * @param id 会员信息主键
     * @return 会员信息
     */
    @Override
    public MhUser selectMhUserById(Long id) {
        return mhUserMapper.selectMhUserById(id);
    }

    @Override
    public MhUser selectWxUserByOpenId(String openId) {
        MhUser mhUser = new MhUser();
        mhUser.setOpenid(openId);
        List<MhUser> mhUsers = mhUserMapper.selectMhUserList(mhUser);
        if (mhUsers != null && mhUsers.size() > 0) {
            return mhUsers.get(0);
        } else {
            return null;
        }
    }

    /**
     * 查询会员信息列表
     *
     * @param mhUser 会员信息
     * @return 会员信息
     */
    @Override
    public List<MhUser> selectMhUserList(MhUser mhUser) {
        return mhUserMapper.selectMhUserList(mhUser);
    }

    /**
     * 新增会员信息
     *
     * @param mhUser 会员信息
     * @return 结果
     */
    /**
     * 生成随机密码
     * 
     * @param minLength 最小长度
     * @param maxLength 最大长度
     * @return 随机密码字符串
     */
    private String generateRandomPassword(int minLength, int maxLength)
    {
        if (minLength <= 0 || maxLength <= 0 || minLength > maxLength)
        {
            throw new IllegalArgumentException("密码长度参数无效");
        }
        
        // 生成随机长度
        Random random = new Random();
        int length = random.nextInt(maxLength - minLength + 1) + minLength;
        
        // 密码字符集：大小写字母+数字
        String charSet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
        StringBuilder password = new StringBuilder();
        
        // 生成随机密码
        for (int i = 0; i < length; i++)
        {
            int index = random.nextInt(charSet.length());
            password.append(charSet.charAt(index));
        }
        
        return password.toString();
    }

    @Override
    public int insertMhUser(MhUser mhUser) {
        mhUser.setCreateTime(DateUtils.getNowDate());
        return mhUserMapper.insertMhUser(mhUser);
    }

    /**
     * 修改会员信息
     *
     * @param mhUser 会员信息
     * @return 结果
     */
    @Override
    public int updateMhUser(MhUser mhUser) {
        mhUser.setUpdateTime(DateUtils.getNowDate());
        return mhUserMapper.updateMhUser(mhUser);
    }

    /**
     * 批量删除会员信息
     *
     * @param ids 需要删除的会员信息主键
     * @return 结果
     */
    @Override
    public int deleteMhUserByIds(Long[] ids) {
        return mhUserMapper.deleteMhUserByIds(ids);
    }

    /**
     * 删除会员信息信息
     *
     * @param id 会员信息主键
     * @return 结果
     */
    @Override
    public int deleteMhUserById(Long id) {
        return mhUserMapper.deleteMhUserById(id);
    }


    @Override
    public MhUser miniAppLogin(WxLoginBody loginBody) {
        if (loginBody == null) {
            return null;
        }
        if (loginBody.getOpenId().equals("")) {
            return null;
        }
        MhUser user = new MhUser();
        user.setOpenid(loginBody.getOpenId());
        user.setSource("wx"); // 微信小程序来源


        List<MhUser> userList = this.selectMhUserList(user);

        MhUser loginUser;
        if (userList.isEmpty()) {
            // 用户不存在，执行注册逻辑
            loginUser = new MhUser();
            loginUser.setOpenid(loginBody.getOpenId());
            loginUser.setAccount(loginBody.getPhone());
            loginUser.setPhone(loginBody.getPhone());
            loginUser.setSource("wx");
            //随机一个8~16的字符串，数据用 Md5Utils 加密
            String randomPassword = generateRandomPassword(8, 16);
            loginUser.setPassword(Md5Utils.hash(randomPassword));

            if (loginBody.getRawData() != null) {
                WxResponeUser wxResponeUser = JSONObject.parseObject(loginBody.getRawData(), WxResponeUser.class);
                if (wxResponeUser != null) {
                    loginUser.setNickname(wxResponeUser.getNickName());
                    loginUser.setAvatar(wxResponeUser.getAvatarUrl());
                }
            }
            loginUser.setStatus(1L); // 正常状态

            int result = this.insertMhUser(loginUser);
            if (result <= 0) {

            }
        } else {
            // 用户已存在，获取用户信息
            loginUser = userList.get(0);

            // 更新用户信息（如昵称、头像可能有变化）
//            loginUser.setNickname(loginBody.getNickname());
//            loginUser.setAvatar(loginBody.getAvatar());
            this.updateMhUser(loginUser);
        }

        return loginUser;

    }
}
